/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.sistemas.sse.util.converter;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import pe.edu.sistemas.sse.entity.UbigeoDepartamento;
import pe.edu.sistemas.sse.entity.UbigeoDistrito;
import pe.edu.sistemas.sse.entity.UbigeoProvincia;
import pe.edu.sistemas.sse.util.UbigeoTemp;
import pe.edu.sistemas.sse.util.helper.CadenaHelper;

/**
 *
 * @author laptop-w8
 */
public class UbigeoConverter {

    public static List<UbigeoDepartamento> obtenerDepartamentos(String nombreArchivo) {
        List<UbigeoDepartamento> l = null;
        List<UbigeoTemp> ltemp = obtenerDatosCSV(nombreArchivo);
//        if (ltemp != null) {
//
//            l = new ArrayList();
//
//            for (UbigeoTemp u1 : ltemp) {
//                UbigeoDepartamento ud = new UbigeoDepartamento();
//                ud.setdCodigo(u1.getUbigeo_01());
//                ud.setdNombre(u1.getDepartamento());
//                if (!l.contains(ud)) {
//                    List<UbigeoProvincia> lp = new ArrayList();
//                    ud.setProvincias(lp);
//                    l.add(ud);
//                }
//            }
//
//            for (UbigeoTemp u1 : ltemp) {
//                for (UbigeoDepartamento ud : l) {
//                    if (ud.getdCodigo().equals(u1.getUbigeo_01())) {
//                        List<UbigeoProvincia> lp = ud.getProvincias();
//
//                        UbigeoProvincia up = new UbigeoProvincia();
//                        up.setdCodigo(u1.getUbigeo_02());
//                        up.setdNombre(u1.getProvincia());
//
//                        if (!lp.contains(up)) {
//                            List<UbigeoDistrito> ld = new ArrayList();
//                            up.setDepartamento(ud);
//                            up.setDistritos(ld);
//                            lp.add(up);
//                        }
//                    }
//                }
//            }
//
//            for (UbigeoTemp u1 : ltemp) {
//                for (UbigeoDepartamento ud : l) {
//                    if (ud.getdCodigo().equals(u1.getUbigeo_01())) {
//                        List<UbigeoProvincia> lp = ud.getProvincias();
//                        for (UbigeoProvincia up : lp) {
//                            if (up.getdCodigo().equals(u1.getUbigeo_02())) {
//                                UbigeoDistrito udi = new UbigeoDistrito();
//                                udi.setProvincia(up);
//                                udi.setdCodigo(u1.getUbigeo_03());
//                                udi.setdNombre(u1.getDistrito());
//                                up.getDistritos().add(udi);
//                            }
//                        }
//                    }
//                }
//            }

//        }
        return l;
    }

    public static List<UbigeoTemp> obtenerDatosCSV(String rutaArchivo) {
        List<UbigeoTemp> l = null;
        BufferedReader bufferEntrada;
        FileInputStream input;
        StringTokenizer lineaToken;
        String linea;

        try {

            input = new FileInputStream(rutaArchivo);
            bufferEntrada = new BufferedReader(new InputStreamReader(input));//, "utf-8"
            l = new ArrayList();

            linea = bufferEntrada.readLine();// encabezado del .cvs
            System.out.println("Encabezado del archivo " + rutaArchivo + " : " + linea);

            linea = bufferEntrada.readLine();
            while (linea != null && linea.length() > 0) {
                lineaToken = new StringTokenizer(CadenaHelper.tokenDepurado(linea, ";"), ";");

                if (lineaToken.countTokens() == 7) {
                    String tk1 = lineaToken.nextToken();
                    String tk2 = lineaToken.nextToken();
                    String tk3 = lineaToken.nextToken();
                    String tk4 = lineaToken.nextToken();
                    String tk5 = lineaToken.nextToken();
                    String tk6 = lineaToken.nextToken();
                    String tk7 = lineaToken.nextToken();

                    if (tokenValido(tk2) && tokenValido(tk3) && tokenValido(tk4)) {

                        UbigeoTemp u = new UbigeoTemp();
                        u.setItem(tk1);
                        u.setUbigeo_01(tk2);
                        u.setUbigeo_02(tk3);
                        u.setUbigeo_03(tk4);
                        u.setDepartamento(tk5);
                        u.setProvincia(tk6);
                        u.setDistrito(tk7);

                        l.add(u);
                    } else {
                        System.out.println("linea no valida: " + linea);
                    }
                } else {
                    System.out.println("linea no valida2: " + linea);
                }

                linea = bufferEntrada.readLine();
            }

            bufferEntrada.close();
            input.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Archivo " + rutaArchivo + " no encontrado");
        } catch (IOException ex) {
            System.out.println("Error de E/S archivo " + rutaArchivo);
        }

        return l;
    }

    private static boolean tokenValido(String token) {
        return !token.equals("") && !token.equals(" ");
    }
}
